home *** CD-ROM | disk | FTP | other *** search
/ com!online 2005 May / com_0505_1.iso / opensource / Thunderbird Setup 1.0.exe / mail.xpi / install.js
Encoding:
JavaScript  |  2004-12-06  |  46.8 KB  |  1,012 lines

  1. // this function verifies disk space in kilobytes
  2. function verifyDiskSpace(dirPath, spaceRequired)
  3. {
  4.   var spaceAvailable;
  5.  
  6.   // Get the available disk space on the given path
  7.   spaceAvailable = fileGetDiskSpaceAvailable(dirPath);
  8.  
  9.   // Convert the available disk space into kilobytes
  10.   spaceAvailable = parseInt(spaceAvailable / 1024);
  11.  
  12.   // do the verification
  13.   if(spaceAvailable < spaceRequired)
  14.   {
  15.     logComment("Insufficient disk space: " + dirPath);
  16.     logComment("  required : " + spaceRequired + " K");
  17.     logComment("  available: " + spaceAvailable + " K");
  18.     return(false);
  19.   }
  20.  
  21.   return(true);
  22. }
  23.  
  24. // this function deletes a file if it exists
  25. function deleteThisFile(dirKey, file)
  26. {
  27.   var fFileToDelete;
  28.  
  29.   fFileToDelete = getFolder(dirKey, file);
  30.   logComment("File to delete: " + fFileToDelete);
  31.   if(File.isFile(fFileToDelete))
  32.   {
  33.     File.remove(fFileToDelete);
  34.     return(true);
  35.   }
  36.   else
  37.     return(false);
  38. }
  39.  
  40. // this function deletes a folder if it exists
  41. function deleteThisFolder(dirKey, folder, recursiveDelete)
  42. {
  43.   var fToDelete;
  44.  
  45.   if(typeof recursiveDelete == "undefined")
  46.     recursiveDelete = true;
  47.  
  48.   fToDelete = getFolder(dirKey, folder);
  49.   logComment("folder to delete: " + fToDelete);
  50.   if(File.isDirectory(fToDelete))
  51.   {
  52.     File.dirRemove(fToDelete, recursiveDelete);
  53.     return(true);
  54.   }
  55.   else
  56.     return(false);
  57. }
  58.  
  59. // OS type detection
  60. // which platform?
  61. function getPlatform()
  62. {
  63.   var platformStr;
  64.   var platformNode;
  65.  
  66.   if('platform' in Install)
  67.   {
  68.     platformStr = new String(Install.platform);
  69.  
  70.     if (!platformStr.search(/^Macintosh/))
  71.       platformNode = 'mac';
  72.     else if (!platformStr.search(/^Win/))
  73.       platformNode = 'win';
  74.     else if (!platformStr.search(/^OS\/2/))
  75.       platformNode = 'win';
  76.     else
  77.       platformNode = 'unix';
  78.   }
  79.   else
  80.   {
  81.     var fOSMac  = getFolder("Mac System");
  82.     var fOSWin  = getFolder("Win System");
  83.  
  84.     logComment("fOSMac: "  + fOSMac);
  85.     logComment("fOSWin: "  + fOSWin);
  86.  
  87.     if(fOSMac != null)
  88.       platformNode = 'mac';
  89.     else if(fOSWin != null)
  90.       platformNode = 'win';
  91.     else
  92.       platformNode = 'unix';
  93.   }
  94.  
  95.   return platformNode;
  96. }
  97.  
  98. function registerProgramFolderKey(winreg, fFolderPath)
  99. {
  100.   var subkey;
  101.   var err;
  102.  
  103.   /* set the Program Folder Path in the Mozilla key in the Windows Registry */
  104.   winreg.createKey("SOFTWARE\\Mozilla","");
  105.  
  106.   subkey  = "SOFTWARE\\Mozilla\\Mozilla Thunderbird";
  107.   winreg.createKey(subkey,"");
  108.   err     = winreg.setValueString(subkey, "CurrentVersion", "1.0 (en)");
  109.  
  110.   subkey  = "SOFTWARE\\Mozilla\\Mozilla Thunderbird\\1.0 (en)";
  111.   winreg.createKey(subkey,"");
  112.  
  113.   subkey  = "SOFTWARE\\Mozilla\\Mozilla Thunderbird\\1.0 (en)\\Main";
  114.   winreg.createKey(subkey,"");
  115.   err     = winreg.setValueString(subkey, "Program Folder Path", fFolderPath);
  116. }
  117.  
  118. function createShortcuts() 
  119. {
  120.   var subkey;
  121.   var valname;
  122.   var szStartMenuPrograms;
  123.   var szStartMenu;
  124.   var szFolderDesktop;
  125.   var szFolderQuickLaunch;
  126.   var szFolderSendTo;
  127.   var szFolderAppData;
  128.   var szStartupFolder;
  129.   var winreg;
  130.   var fWindows;
  131.   var fTemp;
  132.   var fProgram;
  133.   var fDefShortcuts;
  134.   var fileExe;
  135.   var fileReadme;
  136.   var fileLicense;
  137.   var scExeDesc;
  138.   var scReadmeDesc;
  139.   var scLicenseDesc;
  140.   var scProfileDesc;
  141.   var scProfileDescParam;
  142.   var scFolderName;
  143.   var fFolderDesktop;
  144.   var fFolderPath;
  145.   var fFolderPathStr;
  146.   var fFolderQuickLaunch;
  147.   var is_winnt;
  148.   var szCurrentVersion;
  149.   var folderQuickLaunchExists;
  150.  
  151.   winreg               = getWinRegistry();
  152.   fWindows             = getFolder("Windows");
  153.   fProgram             = getFolder("Program");
  154.   fDefShortcuts        = getFolder("Program","defaults/shortcuts");
  155.   fTemp                = fProgram + "thunderbird.exe";
  156.   fileExe              = getFolder("file:///", fTemp);
  157.   fileReadme           = getFolder("file:///", fProgram + "readme.txt");
  158.   fileLicense          = getFolder("file:///", fProgram + "license.txt");
  159.   scExeDesc            = "Mozilla Thunderbird";
  160.   scReadmeDesc         = "Readme";
  161.   scLicenseDesc        = "License";
  162.   scProfileDesc        = "Profile Manager";
  163.   scProfileDescParam   = "-ProfileManager";
  164.   scSafeModeDesc       = "Mozilla Thunderbird (Safe Mode)";
  165.   scSafeModeDescParam  = "-safe-mode";
  166.   scFolderName         = "Mozilla Thunderbird";
  167.  
  168.   fileMailIcon              = getFolder("Chrome", "icons/default/messengerWindow.ico");
  169.  
  170.   if(winreg != null) 
  171.   {
  172.     /* determine if the script is running under NT or not */
  173.     winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
  174.     subkey              = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion";
  175.     szCurrentVersion    = winreg.getValueString(subkey, "CurrentVersion");
  176.     logComment("szCurrentVersion: " + szCurrentVersion);
  177.     if((szCurrentVersion == "") || (szCurrentVersion == null))
  178.     {
  179.       is_winnt = false;
  180.     }
  181.     else
  182.     {
  183.       is_winnt = true;
  184.     }
  185.  
  186.     logComment("is_winnt value: " + is_winnt);
  187.     logComment("restrictedAccess value: " + restrictedAccess);
  188.     if(!is_winnt || restrictedAccess)
  189.     {
  190.       winreg.setRootKey(winreg.HKEY_CURRENT_USER);
  191.       subkey              = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
  192.       szStartMenuPrograms = winreg.getValueString(subkey, "Programs");
  193.       szStartMenu         = winreg.getValueString(subkey, "Start Menu");
  194.       szFolderDesktop     = winreg.getValueString(subkey, "Desktop");
  195.       szStartupFolder     = winreg.getValueString(subkey, "Startup");
  196.       }
  197.     else
  198.     {
  199.       winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
  200.       subkey              = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
  201.       szStartMenuPrograms = winreg.getValueString(subkey, "Common Programs");
  202.       szStartMenu         = winreg.getValueString(subkey, "Common Start Menu");
  203.       szFolderDesktop     = winreg.getValueString(subkey, "Common Desktop");
  204.       szStartupFolder     = winreg.getValueString(subkey, "Common Startup");
  205.    }
  206.  
  207.     winreg.setRootKey(winreg.HKEY_CURRENT_USER);
  208.     subkey              = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
  209.     szFolderSendTo      = winreg.getValueString(subkey, "SendTo");
  210.  
  211.     subkey              = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
  212.     szFolderAppData     = winreg.getValueString(subkey, "AppData");
  213.  
  214.     // locate the Quick Launch folder
  215.     szFolderQuickLaunch     = szFolderAppData + "\\Microsoft\\Internet Explorer\\Quick Launch";
  216.     fFolderQuickLaunch      = getFolder("file:///", szFolderQuickLaunch);
  217.     folderQuickLaunchExists = File.isDirectory(fFolderQuickLaunch);
  218.     if(!folderQuickLaunchExists)
  219.     {
  220.       subkey                  = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\GrpConv\\MapGroups";
  221.       szFolderQuickLaunch     = winreg.getValueString(subkey, "Quick Launch");
  222.       folderQuickLaunchExists = File.isDirectory(fFolderPath);
  223.       if(folderQuickLaunchExists)
  224.         fFolderQuickLaunch = getFolder("file:///", szFolderQuickLaunch);
  225.     }
  226.     logComment("folderQuickLaunchExists: " + folderQuickLaunchExists);
  227.  
  228.     subkey              = "SOFTWARE\\Mozilla\\Mozilla Thunderbird\\1.0 (en)\\Main";
  229.     fFolderPathStr      = winreg.getValueString(subkey, "Program Folder Path");
  230.     if((fFolderPathStr == "") || (fFolderPathStr == null))
  231.     {
  232.       fTemp       = szStartMenuPrograms + "\\" + scFolderName;
  233.       fFolderPath = getFolder("file:///", fTemp);
  234.     }
  235.     else
  236.     {
  237.       /* convert the path string to a path folder object */
  238.       fFolderPath = getFolder("file:///", fFolderPathStr);
  239.     }
  240.     /* convert the path string to a path folder object */
  241.     fFolderDesktop = getFolder("file:///", szFolderDesktop);
  242.  
  243.     logComment("Folder StartMenuPrograms: " + szStartMenuPrograms);
  244.     logComment("Folder StartMenu        : " + szStartMenu);
  245.     logComment("Folder FolderDesktop    : " + szFolderDesktop);
  246.     logComment("Folder FolderSendTo     : " + szFolderSendTo);
  247.     logComment("Folder FolderQuickLaunch: " + szFolderQuickLaunch);
  248.     logComment("fileExe                 : " + fileExe);
  249.     logComment("fFolderPath             : " + fFolderPath);
  250.     logComment("scExeDesc               : " + scExeDesc);
  251.     logComment("fProgram                : " + fProgram);
  252.  
  253.     /* explicitly create the fFolderPath even though the windowsShortcut function creates the folder.
  254.      * This is so that the folder creation gets logged for uninstall to remove it. */
  255.     if(winreg.getValueNumber(subkey, "Create Start Menu Shortcut") != 0 && !File.exists(fFolderPath))
  256.       File.dirCreate(fFolderPath);
  257.     if(winreg.getValueNumber(subkey, "Create Start Menu Shortcut") != 0 && !File.exists(fDefShortcuts))
  258.       File.dirCreate(fDefShortcuts);
  259.  
  260.     /* create the shortcuts */
  261.     // Create the Shortcuts
  262.     winreg.setRootKey(winreg.HKEY_CURRENT_USER);
  263.     subkey              = "SOFTWARE\\Mozilla\\Mozilla Thunderbird\\1.0 (en)\\Main";
  264.     if (winreg.getValueNumber(subkey, "Create Desktop Shortcut") != 0)
  265.         File.windowsShortcut(fileExe, fFolderDesktop, scExeDesc, fProgram, "", fileExe, 0);
  266.  
  267.     if (winreg.getValueNumber(subkey, "Create Start Menu Shortcut") != 0) {
  268.       File.windowsShortcut(fileExe, fFolderPath, scExeDesc, fProgram, "", fileExe, 0);
  269.       File.windowsShortcut(fileExe, fFolderPath,    scProfileDesc, fProgram,  scProfileDescParam, fileExe, 0);
  270.       File.windowsShortcut(fileExe, fFolderPath,    scSafeModeDesc, fProgram,  scSafeModeDescParam, fileExe, 0);
  271.       File.windowsShortcut(fileReadme, fFolderPath, scReadmeDesc, fProgram, "", fileReadme, 0);
  272.       File.windowsShortcut(fileLicense, fFolderPath, scLicenseDesc, fProgram, "", fileLicense, 0);
  273.     }
  274.     File.windowsShortcut(fileExe, fDefShortcuts, scExeDesc,      fProgram, "",                  fileExe, 0);
  275.     File.windowsShortcut(fileExe, fDefShortcuts, scSafeModeDesc, fProgram, scSafeModeDescParam, fileExe, 0);
  276.  
  277.     // create shortcut in the Quick Launch folder
  278.     if (winreg.getValueNumber(subkey, "Create Quick Launch Shortcut") != 0 && folderQuickLaunchExists)
  279.       File.windowsShortcut(fileExe, fFolderQuickLaunch, scExeDesc, fProgram,  "", fileExe, 0);
  280.  
  281.     // Clean up after ourselves
  282.     winreg.deleteValue(subkey, "Create Desktop Shortcut");
  283.     winreg.deleteValue(subkey, "Create Quick Launch Shortcut");
  284.     winreg.deleteValue(subkey, "Create Start Menu Shortcut");
  285.  
  286.     if(!restrictedAccess)
  287.     {
  288.       winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
  289.       registerProgramFolderKey(winreg, fFolderPath);
  290.     }
  291.  
  292.     winreg.setRootKey(winreg.HKEY_CURRENT_USER);
  293.     registerProgramFolderKey(winreg, fFolderPath);
  294.  
  295.     // Register as a windows XP mail application
  296.     if( IsWinnt() )
  297.     {
  298.       subkey = "Software\\Clients\\Mail\\Mozilla Thunderbird";
  299.       winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
  300.  
  301.       winreg.createKey(subkey,"");
  302.       winreg.createKey(subkey + "\\DefaultIcon", "");
  303.       winreg.createKey(subkey + "\\shell", "");
  304.       winreg.createKey(subkey + "\\shell\\open", "");
  305.       winreg.createKey(subkey + "\\shell\\open\\command", "");
  306.       winreg.createKey(subkey + "\\InstallInfo","");
  307.  
  308.       winreg.setValueString(subkey, "", "Mozilla Thunderbird");
  309.  
  310.       // path does not need to be quoted per MS doc
  311.       data = fProgram + "chrome\\icons\\default\\messengerWindow.ico,0";
  312.       winreg.setValueString(subkey + "\\DefaultIcon", "", data);
  313.  
  314.       data = "\"" + fProgram + "thunderbird.exe\"";
  315.       winreg.setValueString(subkey + "\\shell\\open\\command", "", data);
  316.  
  317.       data = "\"" + fProgram + "uninstall\\UninstallThunderbird.exe\" /ua \"1.0 (en)\" /hs";
  318.       winreg.setValueString(subkey + "\\InstallInfo", "HideIconsCommand", data);
  319.  
  320.       // set this value to 0 because we're not creating the mail shortcuts yet.
  321.       winreg.setValueNumber(subkey + "\\InstallInfo", "IconsVisible", 0);
  322.  
  323.       data = "\"" + fProgram + "thunderbird.exe\" -silent -nosplash -setDefaultMail";
  324.       winreg.setValueString(subkey + "\\InstallInfo", "ReinstallCommand", data);
  325.  
  326.       data = "\"" + fProgram + "uninstall\\UninstallThunderbird.exe\" /ua \"1.0 (en)\" /ss mail";
  327.       winreg.setValueString(subkey + "\\InstallInfo", "ShowIconsCommand", data);
  328.     }
  329.   }
  330.   else
  331.   {
  332.     logComment("winreg is null");
  333.   }
  334. }
  335.  
  336. function updateMapi()
  337. {
  338.   var winreg;
  339.   var szValue;
  340.   var szMapiBackupDll;
  341.   var szDefaultMailClient;
  342.   var programMozMapi32File;
  343.   var mainExePath;
  344.   var sfpProgramMozMapi32File;
  345.   var sfpMainExePath;
  346.   var winsysMapi32File;
  347.   var mapiProxyFile;
  348.   var subkey;
  349.   var mailDefaultDescription = "Mozilla Thunderbird";
  350.  
  351.   winreg = getWinRegistry();
  352.   if(winreg != null) 
  353.   {
  354.     mainExePath = getFolder("Program", "thunderbird.exe");
  355.     programMozMapi32File = getFolder("Program", "mozMapi32.dll");
  356.     winsysMapi32File = getFolder("Win System", "Mapi32.dll");
  357.     winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
  358.  
  359.     // If Mapi_backup_dll *and* the default var of
  360.     // HKEY_LOCAL_MACHINE\Software\Clients\Mail is set, then install
  361.     // mozMapi32.dll to the windows system dir as Mapi32.dll.
  362.     szMapiBackupDll = winreg.getValueString("SOFTWARE\\Mozilla\\Desktop", "Mapi_backup_dll");
  363.     szDefaultMailClient = winreg.getValueString("SOFTWARE\\Clients\\Mail", "");
  364.     logComment("szMapiBackupDll: " + szMapiBackupDll);
  365.     logComment("szDefaultMailClient: " + szDefaultMailClient);
  366.     if((szMapiBackupDll != null) && (szMapiBackupDll != "") &&
  367.        (szDefaultMailClient != null) && (szDefaultMailClient == "Mozilla Thunderbird"))
  368.     {
  369.       // We do not want to log this file to be uninstalled because the
  370.       // uninstaller already has a special way to deal with restoring the
  371.       // appropriate previous Mapi32.dll.
  372.       addFile("",
  373.               "1.0",
  374.               "bin/mozMapi32.dll",           // file name in jar to extract 
  375.               getFolder("Win System"),       // Where to put this file (Returned from getFolder) 
  376.               "Mapi32.dll",                  // new name when installed
  377.               DO_NOT_UNINSTALL);
  378.     }
  379.  
  380.     sfpProgramMozMapi32File = File.windowsGetShortName(programMozMapi32File);
  381.     sfpMainExePath = File.windowsGetShortName(mainExePath);
  382.  
  383.     subkey  = "SOFTWARE\\Clients\\Mail\\Mozilla Thunderbird";
  384.     winreg.createKey(subkey, "");
  385.     winreg.setValueString(subkey, "", mailDefaultDescription);
  386.     winreg.setValueString(subkey, "DLLPath", sfpProgramMozMapi32File);
  387.  
  388.     winreg.createKey(subkey      + "\\DefaultIcon", "");
  389.     winreg.setValueString(subkey + "\\DefaultIcon", "", sfpMainExePath + ",0");
  390.  
  391.     // Register mailto protocol handler
  392.  
  393.     winreg.createKey(subkey      + "\\protocols", "");
  394.     winreg.createKey(subkey      + "\\protocols\\mailto", "");
  395.     winreg.setValueString(subkey + "\\protocols\\mailto", "", "URL:MailTo Protocol");
  396.     winreg.setValueString(subkey + "\\protocols\\mailto", "URL Protocol", "");
  397.     winreg.createKey(subkey      + "\\protocols\\mailto\\shell", "");
  398.     winreg.createKey(subkey      + "\\protocols\\mailto\\shell\\open", "");
  399.     winreg.createKey(subkey      + "\\protocols\\mailto\\shell\\open\\command", "");
  400.     winreg.setValueString(subkey + "\\protocols\\mailto\\shell\\open\\command", "", sfpMainExePath + " -compose \"%1\"");
  401.     winreg.createKey(subkey      + "\\protocols\\mailto\\DefaultIcon", "");
  402.     winreg.setValueString(subkey + "\\protocols\\mailto\\DefaultIcon", sfpMainExePath + ",0");
  403.  
  404.     // register shell open command for Mozilla Thunderbird product key under \Mail
  405.     winreg.createKey(subkey      + "\\shell", "");
  406.     winreg.createKey(subkey      + "\\shell\\open", "");
  407.     winreg.createKey(subkey      + "\\shell\\open\\command", "");
  408.     winreg.setValueString(subkey + "\\shell\\open\\command", "", sfpMainExePath);
  409.  
  410.     winreg.createKey(subkey      + "\\shell\\properties", "");
  411.     winreg.setValueString(subkey + "\\shell\\properties", "", "Thunderbird &Options");
  412.     winreg.createKey(subkey      + "\\shell\\properties\\command", "");
  413.     winreg.setValueString(subkey + "\\shell\\properties\\command", "", sfpMainExePath + " -options");
  414.  
  415.     // Register Thunderbird as a News Reader
  416.     subkey  = "SOFTWARE\\Clients\\News\\Mozilla Thunderbird";
  417.     winreg.createKey(subkey, "");
  418.     winreg.setValueString(subkey, "", mailDefaultDescription);
  419.     winreg.setValueString(subkey, "DLLPath", sfpProgramMozMapi32File);
  420.  
  421.     winreg.createKey(subkey      + "\\DefaultIcon", "");
  422.     winreg.setValueString(subkey + "\\DefaultIcon", "", sfpMainExePath + ",0");
  423.  
  424.     // register shell open command for Mozilla Thunderbird product key under \News
  425.     winreg.createKey(subkey      + "\\shell", "");
  426.     winreg.createKey(subkey      + "\\shell\\open", "");
  427.     winreg.createKey(subkey      + "\\shell\\open\\command", "");
  428.     winreg.setValueString(subkey + "\\shell\\open\\command", "", sfpMainExePath);
  429.  
  430.     // Register News protocol handlers (news, snews, nntp)
  431.     winreg.createKey(subkey      + "\\protocols", "");
  432.     winreg.createKey(subkey      + "\\protocols\\news", "");
  433.     winreg.setValueString(subkey + "\\protocols\\news", "", "URL:News Protocol");
  434.     winreg.setValueString(subkey + "\\protocols\\news", "URL Protocol", "");
  435.     winreg.createKey(subkey      + "\\protocols\\news\\shell", "");
  436.     winreg.createKey(subkey      + "\\protocols\\news\\shell\\open", "");
  437.     winreg.createKey(subkey      + "\\protocols\\news\\shell\\open\\command", "");
  438.     winreg.setValueString(subkey + "\\protocols\\news\\shell\\open\\command", "", sfpMainExePath + " -mail \"%1\"");
  439.     winreg.createKey(subkey      + "\\protocols\\news\\DefaultIcon", "");
  440.     winreg.setValueString(subkey + "\\protocols\\news\\DefaultIcon", sfpMainExePath + ",0");
  441.  
  442.     winreg.createKey(subkey      + "\\protocols\\nntp", "");
  443.     winreg.setValueString(subkey + "\\protocols\\nntp", "", "URL:NNTP Protocol");
  444.     winreg.setValueString(subkey + "\\protocols\\nntp", "URL Protocol", "");
  445.     winreg.createKey(subkey      + "\\protocols\\nntp\\shell", "");
  446.     winreg.createKey(subkey      + "\\protocols\\nntp\\shell\\open", "");
  447.     winreg.createKey(subkey      + "\\protocols\\nntp\\shell\\open\\command", "");
  448.     winreg.setValueString(subkey + "\\protocols\\nntp\\shell\\open\\command", "", sfpMainExePath + " -mail \"%1\"");
  449.     winreg.createKey(subkey      + "\\protocols\\nntp\\DefaultIcon", "");
  450.     winreg.setValueString(subkey + "\\protocols\\nntp\\DefaultIcon", sfpMainExePath + ",0");
  451.  
  452.     winreg.createKey(subkey      + "\\protocols\\snews", "");
  453.     winreg.setValueString(subkey + "\\protocols\\snews", "", "URL:Snews Protocol");
  454.     winreg.setValueString(subkey + "\\protocols\\snews", "URL Protocol", "");
  455.     winreg.createKey(subkey      + "\\protocols\\snews\\shell", "");
  456.     winreg.createKey(subkey      + "\\protocols\\snews\\shell\\open", "");
  457.     winreg.createKey(subkey      + "\\protocols\\snews\\shell\\open\\command", "");
  458.     winreg.setValueString(subkey + "\\protocols\\snews\\shell\\open\\command", "", sfpMainExePath + " -mail \"%1\"");
  459.     winreg.createKey(subkey      + "\\protocols\\snews\\DefaultIcon", "");
  460.     winreg.setValueString(subkey + "\\protocols\\snews\\DefaultIcon", sfpMainExePath + ",0");
  461.  
  462.     // Register MapiProxy.dll
  463.     mapiProxyFile = getFolder("Program", "MapiProxy.dll");
  464.     err = File.windowsRegisterServer(mapiProxyFile);
  465.     logComment("File.windowsRegisterServer(" + mapiProxyFile + ") returned: " + err);
  466.   }
  467. }
  468.  
  469. function updateWinIni()
  470. {
  471.   var fWinIni  = getWinProfile(getFolder("Windows"), "win.ini");
  472.   if(fWinIni != null)
  473.   {
  474.     fWinIni.writeString("Mail", "MAPI", "1");
  475.     fWinIni.writeString("Mail", "MAPIX", "1");
  476.   }
  477. }
  478.  
  479. function IsWinnt()
  480. {
  481.   /* Determines if the script is running under NT or not.
  482.    *
  483.    */
  484.   var winreg = getWinRegistry();
  485.   var subkey;
  486.   var szCurrentVersion;
  487.  
  488.   winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
  489.   subkey              = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion";
  490.   szCurrentVersion    = winreg.getValueString(subkey, "CurrentVersion");
  491.   logComment("szCurrentVersion: " + szCurrentVersion);
  492.   return szCurrentVersion != "";
  493. }
  494.  
  495. function registerMainKeys(winreg)
  496. {
  497.   var subkey;  //the name of the subkey you are poking around in
  498.   var data;
  499.   var err;
  500.  
  501.   winreg.createKey("SOFTWARE\\Mozilla","");
  502.  
  503.   subkey  = "SOFTWARE\\Mozilla\\Mozilla Thunderbird";
  504.   winreg.createKey(subkey,"");
  505.   err     = winreg.setValueString(subkey, "CurrentVersion", "1.0 (en)");
  506.  
  507.   subkey  = "SOFTWARE\\Mozilla\\Mozilla Thunderbird\\1.0 (en)";
  508.   winreg.createKey(subkey,"");
  509.  
  510.   subkey  = "SOFTWARE\\Mozilla\\Mozilla Thunderbird\\1.0 (en)\\Main";
  511.   winreg.createKey(subkey,"");
  512.  
  513.   err     = winreg.setValueString(subkey, "Install Directory", fProgram);
  514.  
  515.   // now set Mozilla\Mozilla Thunderbird\bin\PathToExe so 3rd party vendors can find our app
  516.   subkey  = "SOFTWARE\\Mozilla\\Mozilla Thunderbird 1.0\\bin";
  517.   winreg.createKey(subkey,"");
  518.   err     = winreg.setValueString(subkey, "PathToExe", fProgram + "thunderbird.exe");
  519.  
  520.   subkey  = "SOFTWARE\\Mozilla\\Mozilla Thunderbird\\1.0 (en)\\Main";
  521.   err     = winreg.setValueString(subkey, "PathToExe", fProgram + "thunderbird.exe");
  522. }
  523.  
  524. function updateWinReg()
  525. {
  526.   //Notes:
  527.   // can't use a double backslash before subkey - Windows already puts it in.
  528.   // subkeys have to exist before values can be put in.
  529.   var winreg = getWinRegistry();
  530.   var subkey;  //the name of the subkey you are poking around in
  531.   var err;
  532.   var ikwDefined;
  533.  
  534.   if(winreg != null) 
  535.   {
  536.     /* This will check to see if the user has restricted access or not.
  537.      * It checks to see if HKEY_LOCALMACHINE\SOFTWARE is writable.  If
  538.      * it is, then access is not restricted.  This is only used to
  539.      * determine which Desktop, Programs, and Start Menu folders
  540.      * are to used: common or per user
  541.      */
  542.     restrictedAccess = false;
  543.     ikwDefined = typeof(winreg.isKeyWritable);
  544.     logComment("winreg.isKeyWritable(): " + ikwDefined);
  545.     if(ikwDefined == "function")
  546.     {
  547.       winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
  548.       if(!winreg.isKeyWritable("SOFTWARE"))
  549.         restrictedAccess = true;
  550.     }
  551.  
  552.     logComment("restrictedAccess value: " + restrictedAccess);
  553.     if(!restrictedAccess)
  554.     {
  555.       winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
  556.       registerMainKeys(winreg);
  557.  
  558.       // set the App Paths key here
  559.       subkey  = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\thunderbird.exe";
  560.       winreg.createKey(subkey,"");
  561.       err     = winreg.setValueString(subkey, "", fProgram + "thunderbird.exe");
  562.       err     = winreg.setValueString(subkey, "Path", fProgram);
  563.     }
  564.  
  565.     winreg.setRootKey(winreg.HKEY_CURRENT_USER);
  566.     registerMainKeys(winreg);
  567.   }
  568. }
  569.  
  570. function upgradeCleanup()
  571.   // Thunderbird used to not be a static build, so we need to clean up all of the stale dlls
  572.   // from the non static build..
  573.  
  574.   deleteThisFile("Components",  "xpti.dat");
  575.   deleteThisFile("Components",  "compreg.dat");
  576.   deleteThisFile("Components",  "accessibility.dll");
  577.   deleteThisFile("Components",  "appcomps.dll");
  578.   deleteThisFile("Components",  "appshell.dll");
  579.   deleteThisFile("Components",  "caps.dll");
  580.   deleteThisFile("Components",  "chrome.dll");
  581.   deleteThisFile("Components",  "composer.dll");
  582.   deleteThisFile("Components",  "docshell.dll");
  583.   deleteThisFile("Components",  "editor.dll");
  584.   deleteThisFile("Components",  "embedcomponents.dll");
  585.   deleteThisFile("Components",  "gkgfxwin.dll");
  586.   deleteThisFile("Components",  "gklayout.dll");
  587.   deleteThisFile("Components",  "gkparser.dll");
  588.   deleteThisFile("Components",  "gkwidget.dll");
  589.   deleteThisFile("Components",  "i18n.dll");
  590.   deleteThisFile("Components",  "imgicon.dll");
  591.   deleteThisFile("Components",  "imglib2.dll");
  592.   deleteThisFile("Components",  "import.dll");
  593.   deleteThisFile("Components",  "mail.dll");
  594.   deleteThisFile("Components",  "mork.dll");
  595.   deleteThisFile("Components",  "mozfind.dll");
  596.   deleteThisFile("Components",  "mozldap.dll");
  597.   deleteThisFile("Components",  "msgMapi.dll");
  598.   deleteThisFile("Components",  "msgsmime.dll");
  599.   deleteThisFile("Components",  "necko.dll");
  600.   deleteThisFile("Components",  "necko2.dll");
  601.   deleteThisFile("Components",  "nsprefm.dll");
  602.   deleteThisFile("Components",  "pipboot.dll");
  603.   deleteThisFile("Components",  "pipnss.dll");
  604.   deleteThisFile("Components",  "pippki.dll");
  605.   deleteThisFile("Components",  "profile.dll");
  606.   deleteThisFile("Components",  "profilemigration.dll");
  607.   deleteThisFile("Components",  "rdf.dll");
  608.   deleteThisFile("Components",  "txmgr.dll");
  609.   deleteThisFile("Components",  "uconv.dll");
  610.   deleteThisFile("Components",  "wallet.dll");
  611.   deleteThisFile("Components",  "webbrwsr.dll");
  612.   deleteThisFile("Components",  "wlltvwrs.dll");
  613.   deleteThisFile("Components",  "xmlextras.dll");
  614.   deleteThisFile("Components",  "xpc3250.dll");
  615.   deleteThisFile("Components",  "xpcom_compat_c.dll");
  616.   deleteThisFile("Components",  "xppref32.dll");
  617.  
  618.   // xpt files
  619.   deleteThisFile("Components",  "accessibility-msaa.xpt");
  620.   deleteThisFile("Components",  "accessibility.xpt");
  621.   deleteThisFile("Components",  "addrbook.xpt");
  622.   deleteThisFile("Components",  "alerts.xpt");
  623.   deleteThisFile("Components",  "appshell.xpt");
  624.   deleteThisFile("Components",  "autocomplete.xpt");
  625.   deleteThisFile("Components",  "caps.xpt");
  626.   deleteThisFile("Components",  "chardet.xpt");
  627.   deleteThisFile("Components",  "commandhandler.xpt");
  628.   deleteThisFile("Components",  "composer.xpt");
  629.   deleteThisFile("Components",  "content_base.xpt");
  630.   deleteThisFile("Components",  "content_html.xpt");
  631.   deleteThisFile("Components",  "content_htmldoc.xpt");
  632.   deleteThisFile("Components",  "content_xmldoc.xpt");
  633.   deleteThisFile("Components",  "content_xslt.xpt");
  634.   deleteThisFile("Components",  "docshell_base.xpt");
  635.   deleteThisFile("Components",  "dom.xpt");
  636.   deleteThisFile("Components",  "dom_base.xpt");
  637.   deleteThisFile("Components",  "dom_core.xpt");
  638.   deleteThisFile("Components",  "dom_css.xpt");
  639.   deleteThisFile("Components",  "dom_events.xpt");
  640.   deleteThisFile("Components",  "dom_html.xpt");
  641.   deleteThisFile("Components",  "dom_range.xpt");
  642.   deleteThisFile("Components",  "dom_stylesheets.xpt");
  643.   deleteThisFile("Components",  "dom_traversal.xpt");
  644.   deleteThisFile("Components",  "dom_views.xpt");
  645.   deleteThisFile("Components",  "dom_xbl.xpt");
  646.   deleteThisFile("Components",  "dom_xpath.xpt");
  647.   deleteThisFile("Components",  "dom_xul.xpt");
  648.   deleteThisFile("Components",  "downloadmanager.xpt");
  649.   deleteThisFile("Components",  "editor.xpt");
  650.   deleteThisFile("Components",  "embed_base.xpt");
  651.   deleteThisFile("Components",  "exthandler.xpt");
  652.   deleteThisFile("Components",  "find.xpt");
  653.   deleteThisFile("Components",  "gfx.xpt");
  654.   deleteThisFile("Components",  "helperAppDlg.xpt");
  655.   deleteThisFile("Components",  "htmlparser.xpt");
  656.   deleteThisFile("Components",  "imgicon.xpt");
  657.   deleteThisFile("Components",  "imglib2.xpt");
  658.   deleteThisFile("Components",  "impComm4xMail.xpt");
  659.   deleteThisFile("Components",  "import.xpt");
  660.   deleteThisFile("Components",  "intl.xpt");
  661.   deleteThisFile("Components",  "jar.xpt");
  662.   deleteThisFile("Components",  "jsdservice.xpt");
  663.   deleteThisFile("Components",  "jsurl.xpt");
  664.   deleteThisFile("Components",  "layout_base.xpt");
  665.   deleteThisFile("Components",  "layout_xul.xpt");
  666.   deleteThisFile("Components",  "layout_xul_tree.xpt");
  667.   deleteThisFile("Components",  "locale.xpt");
  668.   deleteThisFile("Components",  "lwbrk.xpt");
  669.   deleteThisFile("Components",  "mailnews.xpt");
  670.   deleteThisFile("Components",  "mailview.xpt");
  671.   deleteThisFile("Components",  "mapihook.xpt");
  672.   deleteThisFile("Components",  "mime.xpt");
  673.   deleteThisFile("Components",  "mimetype.xpt");
  674.   deleteThisFile("Components",  "mozbrwsr.xpt");
  675.   deleteThisFile("Components",  "mozfind.xpt");
  676.   deleteThisFile("Components",  "mozldap.xpt");
  677.   deleteThisFile("Components",  "msgbase.xpt");
  678.   deleteThisFile("Components",  "msgcompo.xpt");
  679.   deleteThisFile("Components",  "msgdb.xpt");
  680.   deleteThisFile("Components",  "msgimap.xpt");
  681.   deleteThisFile("Components",  "msglocal.xpt");
  682.   deleteThisFile("Components",  "msgnews.xpt");
  683.   deleteThisFile("Components",  "msgsearch.xpt");        
  684.   deleteThisFile("Components",  "msgsmime.xpt"); 
  685.   deleteThisFile("Components",  "necko.xpt"); 
  686.   deleteThisFile("Components",  "necko_cache.xpt"); 
  687.   deleteThisFile("Components",  "necko_cookie.xpt"); 
  688.   deleteThisFile("Components",  "necko_data.xpt"); 
  689.   deleteThisFile("Components",  "necko_dns.xpt"); 
  690.   deleteThisFile("Components",  "necko_file.xpt"); 
  691.   deleteThisFile("Components",  "necko_http.xpt"); 
  692.   deleteThisFile("Components",  "necko_jar.xpt"); 
  693.   deleteThisFile("Components",  "necko_res.xpt"); 
  694.   deleteThisFile("Components",  "necko_strconv.xpt"); 
  695.   deleteThisFile("Components",  "pipboot.xpt"); 
  696.   deleteThisFile("Components",  "pipnss.xpt"); 
  697.   deleteThisFile("Components",  "pippki.xpt"); 
  698.   deleteThisFile("Components",  "pref.xpt"); 
  699.   deleteThisFile("Components",  "prefmigr.xpt"); 
  700.   deleteThisFile("Components",  "profile.xpt"); 
  701.   deleteThisFile("Components",  "progressDlg.xpt"); 
  702.   deleteThisFile("Components",  "proxyObject.xpt"); 
  703.   deleteThisFile("Components",  "rdf.xpt"); 
  704.   deleteThisFile("Components",  "signonviewer.xpt"); 
  705.   deleteThisFile("Components",  "spellchecker.xpt"); 
  706.   deleteThisFile("Components",  "txmgr.xpt"); 
  707.   deleteThisFile("Components",  "txtsvc.xpt"); 
  708.   deleteThisFile("Components",  "uconv.xpt"); 
  709.   deleteThisFile("Components",  "unicharutil.xpt"); 
  710.   deleteThisFile("Components",  "uriloader.xpt"); 
  711.   deleteThisFile("Components",  "wallet.xpt"); 
  712.   deleteThisFile("Components",  "webbrowserpersist.xpt"); 
  713.   deleteThisFile("Components",  "webBrowser_core.xpt"); 
  714.   deleteThisFile("Components",  "webshell_idls.xpt"); 
  715.   deleteThisFile("Components",  "widget.xpt"); 
  716.   deleteThisFile("Components",  "windowds.xpt"); 
  717.   deleteThisFile("Components",  "windowwatcher.xpt"); 
  718.   deleteThisFile("Components",  "winhooks.xpt"); 
  719.   deleteThisFile("Components",  "xmlextras.xpt"); 
  720.   deleteThisFile("Components",  "xpcom_base.xpt"); 
  721.   deleteThisFile("Components",  "xpcom_components.xpt"); 
  722.   deleteThisFile("Components",  "xpcom_ds.xpt"); 
  723.   deleteThisFile("Components",  "xpcom_io.xpt"); 
  724.   deleteThisFile("Components",  "xpcom_obsolete.xpt"); 
  725.   deleteThisFile("Components",  "xpcom_thread.xpt"); 
  726.   deleteThisFile("Components",  "xpcom_xpti.xpt"); 
  727.   deleteThisFile("Components",  "xpconnect.xpt"); 
  728.   deleteThisFile("Components",  "xpinstall.xpt"); 
  729.   deleteThisFile("Components",  "xuldoc.xpt"); 
  730.   deleteThisFile("Components",  "xultmpl.xpt");
  731.  
  732.   // obsolete JS components
  733.   deleteThisFile("Components", "nsBackgroundUpdateService.js");
  734.   
  735.   deleteThisFile("Chrome",  "chrome.rdf");
  736.  
  737.   deleteThisFile("Program",     "defaults/pref/all.js");
  738.   deleteThisFile("Program",     "defaults/pref/security-prefs.js");
  739.   deleteThisFile("Program",     "defaults/pref/winpref.js");
  740.   deleteThisFile("Program",     "defaults/pref/xpinstall.js");
  741.   deleteThisFile("Program",     "defaults/pref/thunderbird.js");
  742.  
  743.   // Now clean up Uninstall entries that may be laying around in the
  744.   // registry for older versions of the software that we're overwriting/
  745.   // upgrading...
  746.   var wr = getWinRegistry();
  747.   wr.setRootKey(wr.HKEY_LOCAL_MACHINE);
  748.   var i = 0; 
  749.   const uninstallKey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall";
  750.   do {
  751.     var key = wr.enumKeys(uninstallKey, i++);
  752.     if (!key)
  753.       break;
  754.     key = uninstallKey + "\\" + key;
  755.     
  756.     // For us to remove the entry from the ARP uninstall list, the install 
  757.     // folder paths must *match* and the display version strings must *NOT
  758.     // MATCH* - i.e. we don't want to remove the entry we just created for
  759.     // this version.
  760.     var itemInstallFolder = wr.getValueString(key, "InstallLocation");
  761.     var thisInstallFolder = wr.getValueString("SOFTWARE\\Mozilla\\Mozilla Thunderbird\\1.0 (en)\\Main", 
  762.                                               "Install Directory");
  763.     var itemInstallFolderShortName = File.windowsGetShortName(getFolder("file:///", itemInstallFolder));
  764.     var thisInstallFolderShortName = File.windowsGetShortName(getFolder("file:///", thisInstallFolder));
  765.     
  766.     var itemDisplayVersion = wr.getValueString(key, "DisplayVersion");
  767.     var thisDisplayVersion = "1.0 (en)";
  768.  
  769.     // It is possible that a user might have installed several products into
  770.     // the same directory that have the same "DisplayVersion" (e.g. "1.0")... 
  771.     // in this case we don't want to trash the Uninstall info for the others
  772.     // so we have to be sure to make sure Comment matches... we use Comment
  773.     // instead of DisplayName since DisplayName varies from version to version
  774.     // as it contains the version number, and this instance of javascript is
  775.     // crippled so as not to contain any useful string parsing.
  776.     var itemComment = wr.getValueString(key, "Comment");
  777.     var thisComment = "Mozilla Thunderbird";
  778.  
  779.     if ((itemComment == thisComment || itemComment == "Reclaim Your Inbox.") && 
  780.         itemInstallFolderShortName == thisInstallFolderShortName &&
  781.         thisDisplayVersion != itemDisplayVersion && 
  782.         wr.isKeyWritable(key)) {
  783.       wr.deleteKey(key);
  784.       logComment("Removing obsolete uninstall key with upgrade: " + key);
  785.     }
  786.   }
  787.   while (true);
  788. }
  789.  
  790. // main
  791. var srDest;
  792. var err;
  793. var err2;
  794. var fProgram;
  795. var fWindowsSystem;
  796. var fileComponentRegStr;
  797. var fileComponentReg;
  798. var restrictedAccess;
  799. var fileToRegister;
  800. var args;
  801. var gGreLocal = false;
  802.  
  803. args = new String(Install.arguments);
  804. logComment("args: " + args);
  805.  
  806. // If -gGreLocal is passed in, then we need to *not* cleanup GRE files if they
  807. // exist in the browser dir.
  808. // The default is to delete any GRE files because we default GRE will be global.
  809. if(args == "-greLocal")
  810.   gGreLocal = true;
  811.  
  812. srDest = 77;
  813. err    = initInstall("Mozilla Thunderbird", "Thunderbird", "1.0"); 
  814. logComment("initInstall: " + err);
  815.  
  816. fProgram  = getFolder("Program");
  817. fWindowsSystem = getFolder("Win System");
  818. logComment("fProgram: " + fProgram);
  819.  
  820. if(verifyDiskSpace(fProgram, srDest))
  821. {
  822.   setPackageFolder(fProgram);
  823.  
  824.   upgradeCleanup();
  825.   err = addDirectory("",
  826.                      "1.0",
  827.                      "bin",              // dir name in jar to extract 
  828.                      fProgram,           // Where to put this file (Returned from GetFolder) 
  829.                      "",                 // subdir name to create relative to fProgram
  830.                      true);              // Force Flag 
  831.   logComment("addDirectory() of Program returned: " + err);
  832.  
  833.   // check return value
  834.   if( err == SUCCESS )
  835.   {
  836.     fileToRegister = getFolder(fProgram, "AccessibleMarshal.dll");
  837.     err2           = File.windowsRegisterServer(fileToRegister);
  838.     logComment("windowsRegisterServer() returned: " + err2);
  839.     updateWinReg();  // Finish registering above marshalling dll's
  840.  
  841.     createShortcuts();
  842.     updateWinIni();
  843.     updateMapi();
  844.  
  845.     // we don't want to fail on errors for the above two
  846.     resetError();
  847.  
  848.     // register chrome
  849.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome", "mail.jar"), "content/mozapps/");
  850.     
  851.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","mail.jar"),"content/autoconfig/");
  852.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","mail.jar"),"content/necko/");
  853.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","mail.jar"),"content/wallet/");
  854.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","mail.jar"),"content/xbl-marquee/");
  855.  
  856.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","mail.jar"),"content/global/");
  857.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","mail.jar"),"content/global-region/");
  858.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","mail.jar"),"content/global-platform/");
  859.  
  860.     // XXXben Stuff that will become obsolete
  861.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","mail.jar"),"content/navigator/");
  862.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","mail.jar"),"content/navigator-region/");
  863.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","mail.jar"),"content/navigator-platform/");
  864.  
  865.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","mail.jar"),"content/communicator/");
  866.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","mail.jar"),"content/communicator-region/");
  867.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","mail.jar"),"content/communicator-platform/");
  868.  
  869.     // register chrome
  870.  
  871.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","mail.jar"), "content/editor/");
  872.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","mail.jar"), "content/editor-region/");
  873.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","mail.jar"), "content/help/");
  874.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","mail.jar"), "content/mozldap/");
  875.  
  876.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","mail.jar"), "content/messenger/");
  877.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","mail.jar"), "content/messenger-smime/");
  878.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","mail.jar"), "content/messenger-region/");
  879.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","mail.jar"), "content/messenger-mdn/");
  880.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","mail.jar"), "content/messenger-views/");
  881.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","mail.jar"), "content/messenger-mapi/");
  882.  
  883.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","mail.jar"), "content/communicator/downloadmanager/");  
  884.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","mail.jar"), "content/pippki/"); 
  885.     registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","mail.jar"), "content/pipnss/");  
  886.  
  887.     registerChrome(SKIN | DELAYED_CHROME, getFolder("Chrome","qute.jar"), "skin/classic/global/");
  888.     registerChrome(SKIN | DELAYED_CHROME, getFolder("Chrome","qute.jar"), "skin/classic/communicator/");
  889.     registerChrome(SKIN | DELAYED_CHROME, getFolder("Chrome","qute.jar"), "skin/classic/mozapps/");
  890.     registerChrome(SKIN | DELAYED_CHROME, getFolder("Chrome","qute.jar"), "skin/classic/navigator/");
  891.     registerChrome(SKIN | DELAYED_CHROME, getFolder("Chrome","qute.jar"), "skin/classic/editor/");
  892.     registerChrome(SKIN | DELAYED_CHROME, getFolder("Chrome","qute.jar"), "skin/classic/messenger/");
  893.  
  894.     // Create the uninstall folder. 
  895.     err = File.dirCreate(getFolder("Program", "uninstall"));
  896.     logComment("dirCreate() of Program/uninstall returned: " + err);
  897.  
  898.     /* Log files that are created after the installer is done, so they can be uninstalled */
  899.     logComment("Installing: "    + fProgram + ".autoreg");
  900.     logComment("Installing: "    + fProgram + "Xpcs Registry.dat");
  901.     logComment("Installing: "    + fProgram + "xpcom.log");
  902.     logComment("Create Folder: " + fProgram + "components");
  903.     logComment("Installing: "    + fProgram + "components\\xpti.dat");
  904.     logComment("Installing: "    + fProgram + "components\\xptitemp.dat");
  905.     logComment("Installing: "    + fProgram + "components\\compreg.dat");
  906.     logComment("Create Folder: " + fProgram + "chrome");
  907.     logComment("Installing: "    + fProgram + "chrome\\installed-chrome.txt");
  908.     logComment("Installing: "    + fProgram + "chrome\\chrome.rdf");
  909.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo");
  910.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo\\communicator");
  911.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo\\communicator\\content");
  912.     logComment("Installing: "    + fProgram + "chrome\\overlayinfo\\communicator\\content\\overlays.rdf");
  913.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo\\editor");
  914.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo\\editor\\content");
  915.     logComment("Installing: "    + fProgram + "chrome\\overlayinfo\\editor\\content\\overlays.rdf");
  916.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo\\messenger");
  917.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo\\messenger\\content");
  918.     logComment("Installing: "    + fProgram + "chrome\\overlayinfo\\messenger\\content\\overlays.rdf");
  919.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo\\cookie");
  920.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo\\cookie\\content");
  921.     logComment("Installing: "    + fProgram + "chrome\\overlayinfo\\cookie\\content\\overlays.rdf");
  922.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo\\navigator");
  923.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo\\navigator\\content");
  924.     logComment("Installing: "    + fProgram + "chrome\\overlayinfo\\navigator\\content\\overlays.rdf");
  925.     logComment("Create Folder: " + fProgram + "chrome\\overlayinfo\\navigator\\skin");
  926.     logComment("Installing: "    + fProgram + "chrome\\overlayinfo\\navigator\\skin\\stylesheets.rdf");
  927.     logComment("Create Folder: " + fProgram + "uninstall");
  928.  
  929.     // log comments for uninstalling the registry keys created by mail for setting
  930.     // itself up in WinXP's Start menu
  931.     logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\Mail\\Mozilla Thunderbird []");
  932.     logComment("Store Registry Value: HKEY_LOCAL_MACHINE\\Software\\Clients\\Mail\\Mozilla Thunderbird []");
  933.     logComment("Store Registry Value: HKEY_LOCAL_MACHINE\\Software\\Clients\\Mail\\Mozilla Thunderbird [DLLPath]");
  934.     logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\Mail\\Mozilla Thunderbird\\DefaultIcon []");
  935.     logComment("Store Registry Value: HKEY_LOCAL_MACHINE\\Software\\Clients\\Mail\\Mozilla Thunderbird\\DefaultIcon []");
  936.     logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\Mail\\Mozilla Thunderbird\\protocols []");
  937.     logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\Mail\\Mozilla Thunderbird\\protocols\\mailto []");
  938.     logComment("Store Registry Value: HKEY_LOCAL_MACHINE\\Software\\Clients\\Mail\\Mozilla Thunderbird\\protocols\\mailto []");
  939.     logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\Mail\\Mozilla Thunderbird\\protocols\\mailto\\DefaultIcon []");
  940.     logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\Mail\\Mozilla Thunderbird\\protocols\\mailto\\shell []");
  941.     logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\Mail\\Mozilla Thunderbird\\protocols\\mailto\\shell\\open []");
  942.     logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\Mail\\Mozilla Thunderbird\\protocols\\mailto\\shell\\open\\command []");
  943.     logComment("Store Registry Value: HKEY_LOCAL_MACHINE\\Software\\Clients\\Mail\\Mozilla Thunderbird\\protocols\\mailto\\shell\\open\\command []");
  944.     logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\Mail\\Mozilla Thunderbird\\shell []");
  945.     logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\Mail\\Mozilla Thunderbird\\shell\\open []");
  946.     logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\Mail\\Mozilla Thunderbird\\shell\\open\\command []");
  947.     logComment("Store Registry Value: HKEY_LOCAL_MACHINE\\Software\\Clients\\Mail\\Mozilla Thunderbird\\shell\\open\\command []");
  948.  
  949.     logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\News\\Mozilla Thunderbird []");
  950.     logComment("Store Registry Value: HKEY_LOCAL_MACHINE\\Software\\Clients\\News\\Mozilla Thunderbird []");
  951.     logComment("Store Registry Value: HKEY_LOCAL_MACHINE\\Software\\Clients\\News\\Mozilla Thunderbird [DLLPath]");
  952.     logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\News\\Mozilla Thunderbird\\DefaultIcon []");
  953.     logComment("Store Registry Value: HKEY_LOCAL_MACHINE\\Software\\Clients\\News\\Mozilla Thunderbird\\DefaultIcon []");
  954.     logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\News\\Mozilla Thunderbird\\protocols []");
  955.     logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\News\\Mozilla Thunderbird\\protocols\\news []");
  956.     logComment("Store Registry Value: HKEY_LOCAL_MACHINE\\Software\\Clients\\News\\Mozilla Thunderbird\\protocols\\news []");
  957.     logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\News\\Mozilla Thunderbird\\protocols\\news\\DefaultIcon []");
  958.     logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\News\\Mozilla Thunderbird\\protocols\\news\\shell []");
  959.     logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\News\\Mozilla Thunderbird\\protocols\\news\\shell\\open []");
  960.     logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\News\\Mozilla Thunderbird\\protocols\\news\\shell\\open\\command []");
  961.     logComment("Store Registry Value: HKEY_LOCAL_MACHINE\\Software\\Clients\\News\\Mozilla Thunderbird\\protocols\\news\\shell\\open\\command []");
  962.  
  963.     logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\News\\Mozilla Thunderbird\\protocols\\snews []");
  964.     logComment("Store Registry Value: HKEY_LOCAL_MACHINE\\Software\\Clients\\News\\Mozilla Thunderbird\\protocols\\snews []");
  965.     logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\News\\Mozilla Thunderbird\\protocols\\snews\\DefaultIcon []");
  966.     logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\News\\Mozilla Thunderbird\\protocols\\snews\\shell []");
  967.     logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\News\\Mozilla Thunderbird\\protocols\\snews\\shell\\open []");
  968.     logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\News\\Mozilla Thunderbird\\protocols\\snews\\shell\\open\\command []");
  969.     logComment("Store Registry Value: HKEY_LOCAL_MACHINE\\Software\\Clients\\News\\Mozilla Thunderbird\\protocols\\snews\\shell\\open\\command []");
  970.  
  971.  
  972.     logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\News\\Mozilla Thunderbird\\protocols\\nntp []");
  973.     logComment("Store Registry Value: HKEY_LOCAL_MACHINE\\Software\\Clients\\News\\Mozilla Thunderbird\\protocols\\nntp []");
  974.     logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\News\\Mozilla Thunderbird\\protocols\\nntp\\DefaultIcon []");
  975.     logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\News\\Mozilla Thunderbird\\protocols\\nntp\\shell []");
  976.     logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\News\\Mozilla Thunderbird\\protocols\\nntp\\shell\\open []");
  977.     logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\News\\Mozilla Thunderbird\\protocols\\nntp\\shell\\open\\command []");
  978.     logComment("Store Registry Value: HKEY_LOCAL_MACHINE\\Software\\Clients\\News\\Mozilla Thunderbird\\protocols\\nntp\\shell\\open\\command []");
  979.  
  980.     logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\News\\Mozilla Thunderbird\\shell []");
  981.     logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\News\\Mozilla Thunderbird\\shell\\open []");
  982.     logComment("Create Registry Key: HKEY_LOCAL_MACHINE\\Software\\Clients\\News\\Mozilla Thunderbird\\shell\\open\\command []");
  983.     logComment("Store Registry Value: HKEY_LOCAL_MACHINE\\Software\\Clients\\News\\Mozilla Thunderbird\\shell\\open\\command []");
  984.  
  985.     err = getLastError();
  986.     if (err == SUCCESS)
  987.     {
  988.       err = performInstall();
  989.       logComment("performInstall() returned: " + err);
  990.       if (! ('buildID' in Install))
  991.       {
  992.         logComment("Running Pre-Mozilla 0.9.1");
  993.         initInstall("Post-install Cleanup Utility", "Mail/xpicleanup", "1.0");
  994.         cleanupUtility = getFolder(fProgram, "xpicleanup.exe");
  995.         err = File.execute(cleanupUtility);
  996.         logComment("execute() returned: " + err);
  997.         err = performInstall();
  998.       }
  999.     }
  1000.     else
  1001.       cancelInstall(err);
  1002.   }
  1003.   else
  1004.     cancelInstall(err);
  1005. }
  1006. else
  1007.   cancelInstall(INSUFFICIENT_DISK_SPACE);
  1008.  
  1009.  
  1010. // end main
  1011.